/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：UICompositeTree.js<br>
 * 日期：2016年8月8日<br>
 * 作者: 刘昭<br>
 * 功能：树形图 组件<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/

window.makeNamespace(window,"Rainier.UI.V2");


/**
 * 类型名称：Rainier.UI.V2.UICompositeTree<br>
 * 类型功能：布局类声明<br>
 * 接口函数：<br>
 * 成员变量：<br>
 */
Rainier.UI.V2.UICompositeTree = Rainier.UI.V2.UIComposite.extend({
	
	NAME : "Rainier.UI.V2.UICompositeTree",
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.init<br>
	 * 函数功能：构造函数<br>
	 * 参数输入：objParentComposite  	父组件实例<br>
	 * 参数输入：objProperties		 	组件属性定义<br>	
	 * 异常信息：<br>
	 */
	init : function(objParentComposite,objProperties){
		//使用父类初始化子类对象
		this._super(objParentComposite,objProperties);
	},

	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.appendEventHandler<br>
	 * 函数功能：添加事件代理<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：<br>
	 */
	appendEventHandler : function(){		
		this.m_aEventList = ['onClick',
		                     'onDblClick',
		                     'onBeforeLoad',
		                     'onLoadSuccess',
		                     'onLoadError',
		                     'onBeforeExpand',
		                     'onExpand',
		                     'onBeforeCollapse',
		                     'onCollapse',
		                     'onBeforeCheck',
		                     'onCheck',
		                     'onBeforeSelect',
		                     'onSelect',
		                     'onContextMenu',
		                     'onBeforeDrag',
		                     'onStartDrag',
		                     'onStopDrag',
		                     'onDragEnter',
		                     'onDragOver',
		                     'onDragLeave',
		                     'onBeforeDrop',
		                     'onDrop',
		                     'onBeforeEdit',
		                     'onAfterEdit',
		                     'onCancelEdit',
		                     ];
		this._super();
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.createComposite<br>
	 * 函数功能：创建组件<br>
	 * 参数输入：eleParent : 父组件的节点元素<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	createComposite : function(eleParent){
		this._super(eleParent);		
		var newEle = this.CreateElement("ul",this.m_objProperties.id);
		eleParent.append(newEle);
		newEle.tree(this.m_objProperties);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.callUiMethod<br>
	 * 函数功能：添加事件代理<br>
	 * 参数输入：sMethod 方法名称
	 * 参数输入：objArgs 方法参数
	 * 函数返回：无<br>
	 * 异常信息：<br>
	 */
	callUiMethod : function(sMethod,objArgs){
		return this.getElement().tree(sMethod,objArgs);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.options<br>
	 * 函数功能：返回选项（options）对象<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	options: function(){
		return this.getElement().tree('options');
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.loadData<br>
	 * 函数功能：加载本地数据，旧的行会被移除。<br>
	 * 参数输入：data	本地数据<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	loadData: function(data){
		return this.getElement().tree('loadData',data);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.getNode<br>
	 * 函数功能：获取指定的节点对象。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getNode: function(target){
		return this.getElement().tree('getNode',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.getData<br>
	 * 函数功能：返回加载的数据。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getData: function(target){
		return this.getElement().tree('getData',target);
	},
	

	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.reload<br>
	 * 函数功能：重新加载树的数据。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	reload: function(target){
		return this.getElement().tree('reload',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.getRoot<br>
	 * 函数功能：获取根节点，返回节点对象。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getRoot: function(){
		return this.getElement().tree('getRoot');
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.getRoots<br>
	 * 函数功能：获取根节点，返回节点数组。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getRoots: function(){
		return this.getElement().tree('getRoots');
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.getParent<br>
	 * 函数功能：获取父节点，target 参数表示节点的 DOM 对象。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getParent: function(target){
		return this.getElement().tree('getParent',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.getChildren<br>
	 * 函数功能：获取子节点， target 参数表示节点的 DOM 对象。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getChildren: function(target){
		return this.getElement().tree('getChildren',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.getChecked<br>
	 * 函数功能：获取选中的节点。<br>
	 * 参数输入：state  状态可用值有：'checked'、'unchecked'、'indeterminate'。如果状态未分配，则返回 'checked' 节点。<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getChecked: function(state){
		return this.getElement().tree('getChecked',state);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.getSelected<br>
	 * 函数功能：获取选中的节点并返回它，如果没有选中节点，则返回 null。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getSelected: function(){
		return this.getElement().tree('getSelected');
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.isLeaf<br>
	 * 函数功能：把指定的节点定义成叶节点，target 参数表示节点的 DOM 对象。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	isLeaf: function(target){
		return this.getElement().tree('isLeaf',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.find<br>
	 * 函数功能：找到指定的节点并返回该节点对象。<br>
	 * 参数输入：id		node.target或者节点id<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	find: function(id){
		return this.getElement().tree('find',id);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.select<br>
	 * 函数功能：选中一个节点。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	select: function(target){
		return this.getElement().tree('select',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.check<br>
	 * 函数功能：把指定节点设置为勾选。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	check: function(target){
		return this.getElement().tree('check',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.uncheck<br>
	 * 函数功能：把指定节点设置为未勾选。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	uncheck: function(target){
		return this.getElement().tree('uncheck',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.collapse<br>
	 * 函数功能：折叠一个节点。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	collapse: function(target){
		return this.getElement().tree('collapse',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.expand<br>
	 * 函数功能：展开一个节点，当节点关闭且没有子节点时，节点的 id 值（名为 'id' 参数）将被发送至服务器以请求子节点数据。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	expand: function(target){
		return this.getElement().tree('expand',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.collapseAll<br>
	 * 函数功能：折叠所有的节点。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	collapseAll: function(target){
		return this.getElement().tree('collapseAll',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.expandAll<br>
	 * 函数功能：展开所有的节点。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	expandAll: function(target){
		return this.getElement().tree('expandAll',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.expandTo<br>
	 * 函数功能：从根部展开一个指定的节点。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	expandTo: function(target){
		return this.getElement().tree('expandTo',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.scrollTo<br>
	 * 函数功能：滚动到指定节点。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	scrollTo: function(target){
		return this.getElement().tree('scrollTo',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.append<br>
	 * 函数功能：追加一些子节点到一个父节点。<br>
	 * 参数输入：param 参数有两个属性：
	 * 					parent：DOM 对象，要追加到的父节点，如果没有分配，则追加为根节点。
	 * 					data：数组，节点的数据。<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	append: function(param){
		return this.getElement().tree('append',param);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.toggle<br>
	 * 函数功能：切换节点的展开/折叠状态。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	toggle: function(target){
		return this.getElement().tree('toggle',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.insert<br>
	 * 函数功能：在指定节点的前边或后边插入一个节点。<br>
	 * 参数输入：param 参数包括下列属性：
	 * 					before：DOM 对象，前边插入的节点。
	 * 					after：DOM 对象，后边插入的节点。
	 * 					data：对象，节点数据。<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	insert: function(param){
		return this.getElement().tree('insert',param);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.remove<br>
	 * 函数功能：移除一个节点和它的子节点。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	remove: function(target){
		return this.getElement().tree('remove',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.pop<br>
	 * 函数功能：弹出一个节点和它的子节点，该方法和 remove 一样，但是返回了移除的节点数据。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	pop: function(target){
		return this.getElement().tree('pop',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.update<br>
	 * 函数功能：更新指定的节点。<br>
	 * 参数输入：'param' 参数有下列属性：
	 * 				target（DOM 对象，要被更新的节点）、id、text、iconCls、checked，等等。<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	update: function(param){
		return this.getElement().tree('update',param);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.enableDnd<br>
	 * 函数功能：启用拖放功能。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	enableDnd: function(){
		return this.getElement().tree('enableDnd');
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.disableDnd<br>
	 * 函数功能：禁用拖放功能。<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	disableDnd: function(){
		return this.getElement().tree('disableDnd');
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.beginEdit<br>
	 * 函数功能：开始编辑节点。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	beginEdit: function(target){
		return this.getElement().tree('beginEdit',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.endEdit<br>
	 * 函数功能：结束编辑节点。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	endEdit: function(target){
		return this.getElement().tree('endEdit',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.cancelEdit<br>
	 * 函数功能：取消编辑节点。<br>
	 * 参数输入：target		目标DOM节点<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	cancelEdit: function(target){
		return this.getElement().tree('cancelEdit',target);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTree.doFilter<br>
	 * 函数功能：执行筛选操作<br>
	 * 参数输入：text	筛序条件<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	doFilter: function(text){
		return this.getElement().tree('doFilter',text);
	},
});